home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 April: Mac OS SDK / Dev.CD Apr 97 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Interfaces / CIncludes / Components.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-29  |  17.5 KB  |  500 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        Components.h
  3.  
  4.      Contains:    QuickTime interfaces
  5.  
  6.      Version:    Technology:    Technology:    QuickTime 2.5
  7.                  Package:    Universal Interfaces 2.1.3
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __COMPONENTS__
  19. #define __COMPONENTS__
  20.  
  21. #ifndef __ERRORS__
  22. #include <Errors.h>
  23. #endif
  24. #ifndef __TYPES__
  25. #include <Types.h>
  26. #endif
  27. #ifndef __MEMORY__
  28. #include <Memory.h>
  29. #endif
  30. #ifndef __MIXEDMODE__
  31. #include <MixedMode.h>
  32. #endif
  33.  
  34. #ifdef __cplusplus
  35. extern "C" {
  36. #endif
  37.  
  38. #if PRAGMA_IMPORT_SUPPORTED
  39. #pragma import on
  40. #endif
  41.  
  42. #if PRAGMA_ALIGN_SUPPORTED
  43. #pragma options align=mac68k
  44. #endif
  45.  
  46.  
  47. enum {
  48.     kAppleManufacturer            = 'appl',                        /* Apple supplied components */
  49.     kComponentResourceType        = 'thng'                        /* a components resource type */
  50. };
  51.  
  52.  
  53. enum {
  54.     kAnyComponentType            = 0,
  55.     kAnyComponentSubType        = 0,
  56.     kAnyComponentManufacturer    = 0,
  57.     kAnyComponentFlagsMask        = 0
  58. };
  59.  
  60.  
  61. enum {
  62.     cmpWantsRegisterMessage        = 1L << 31
  63. };
  64.  
  65.  
  66. enum {
  67.     kComponentOpenSelect        = -1,                            /* ComponentInstance for this open */
  68.     kComponentCloseSelect        = -2,                            /* ComponentInstance for this close */
  69.     kComponentCanDoSelect        = -3,                            /* selector # being queried */
  70.     kComponentVersionSelect        = -4,                            /* no params */
  71.     kComponentRegisterSelect    = -5,                            /* no params */
  72.     kComponentTargetSelect        = -6,                            /* ComponentInstance for top of call chain */
  73.     kComponentUnregisterSelect    = -7,                            /* no params */
  74.     kComponentGetMPWorkFunctionSelect = -8                        /* some params */
  75. };
  76.  
  77. /* Component Resource Extension flags */
  78.  
  79. enum {
  80.     componentDoAutoVersion        = (1 << 0),
  81.     componentWantsUnregister    = (1 << 1),
  82.     componentAutoVersionIncludeFlags = (1 << 2),
  83.     componentHasMultiplePlatforms = (1 << 3)
  84. };
  85.  
  86. /* Set Default Component flags */
  87.  
  88. enum {
  89.     defaultComponentIdentical    = 0,
  90.     defaultComponentAnyFlags    = 1,
  91.     defaultComponentAnyManufacturer = 2,
  92.     defaultComponentAnySubType    = 4,
  93.     defaultComponentAnyFlagsAnyManufacturer = (defaultComponentAnyFlags + defaultComponentAnyManufacturer),
  94.     defaultComponentAnyFlagsAnyManufacturerAnySubType = (defaultComponentAnyFlags + defaultComponentAnyManufacturer + defaultComponentAnySubType)
  95. };
  96.  
  97. /* RegisterComponentResource flags */
  98.  
  99. enum {
  100.     registerComponentGlobal        = 1,
  101.     registerComponentNoDuplicates = 2,
  102.     registerComponentAfterExisting = 4
  103. };
  104.  
  105. struct ComponentDescription {
  106.     OSType                             componentType;                /* A unique 4-byte code indentifying the command set */
  107.     OSType                             componentSubType;            /* Particular flavor of this instance */
  108.     OSType                             componentManufacturer;        /* Vendor indentification */
  109.     unsigned long                     componentFlags;                /* 8 each for Component,Type,SubType,Manuf/revision */
  110.     unsigned long                     componentFlagsMask;            /* Mask for specifying which flags to consider in search, zero during registration */
  111. };
  112. typedef struct ComponentDescription ComponentDescription;
  113.  
  114. struct ResourceSpec {
  115.     OSType                             resType;                    /* 4-byte code     */
  116.     short                             resID;                        /*              */
  117. };
  118. typedef struct ResourceSpec ResourceSpec;
  119.  
  120. struct ComponentResource {
  121.     ComponentDescription             cd;                            /* Registration parameters */
  122.     ResourceSpec                     component;                    /* resource where Component code is found */
  123.     ResourceSpec                     componentName;                /* name string resource */
  124.     ResourceSpec                     componentInfo;                /* info string resource */
  125.     ResourceSpec                     componentIcon;                /* icon resource */
  126. };
  127. typedef struct ComponentResource ComponentResource;
  128.  
  129. typedef ComponentResource *ComponentResourcePtr;
  130. typedef ComponentResourcePtr *ComponentResourceHandle;
  131. struct ComponentPlatformInfo {
  132.     long                             componentFlags;                /* flags of Component */
  133.     ResourceSpec                     component;                    /* resource where Component code is found */
  134.     short                             platformType;                /* gestaltSysArchitecture result */
  135. };
  136. typedef struct ComponentPlatformInfo ComponentPlatformInfo;
  137.  
  138. struct ComponentResourceExtension {
  139.     long                             componentVersion;            /* version of Component */
  140.     long                             componentRegisterFlags;        /* flags for registration */
  141.     short                             componentIconFamily;        /* resource id of Icon Family */
  142. };
  143. typedef struct ComponentResourceExtension ComponentResourceExtension;
  144.  
  145. struct ComponentPlatformInfoArray {
  146.     long                             count;
  147.     ComponentPlatformInfo             platformArray[1];
  148. };
  149. typedef struct ComponentPlatformInfoArray ComponentPlatformInfoArray;
  150.  
  151. struct ExtComponentResource {
  152.     ComponentDescription             cd;                            /* registration parameters */
  153.     ResourceSpec                     component;                    /* resource where Component code is found */
  154.     ResourceSpec                     componentName;                /* name string resource */
  155.     ResourceSpec                     componentInfo;                /* info string resource */
  156.     ResourceSpec                     componentIcon;                /* icon resource */
  157.     long                             componentVersion;            /* version of Component */
  158.     long                             componentRegisterFlags;        /* flags for registration */
  159.     short                             componentIconFamily;        /* resource id of Icon Family */
  160.     long                             count;                        /* elements in platformArray */
  161.     ComponentPlatformInfo             platformArray[1];
  162. };
  163. typedef struct ExtComponentResource ExtComponentResource;
  164.  
  165. /*  Structure received by Component:        */
  166. struct ComponentParameters {
  167.     UInt8                             flags;                        /* call modifiers: sync/async, deferred, immed, etc */
  168.     UInt8                             paramSize;                    /* size in bytes of actual parameters passed to this call */
  169.     short                             what;                        /* routine selector, negative for Component management calls */
  170.     long                             params[1];                    /* actual parameters for the indicated routine */
  171. };
  172. typedef struct ComponentParameters ComponentParameters;
  173.  
  174. struct ComponentRecord {
  175.     long                             data[1];
  176. };
  177. typedef struct ComponentRecord ComponentRecord;
  178.  
  179. typedef ComponentRecord *Component;
  180. struct ComponentInstanceRecord {
  181.     long                             data[1];
  182. };
  183. typedef struct ComponentInstanceRecord ComponentInstanceRecord;
  184.  
  185. typedef ComponentInstanceRecord *ComponentInstance;
  186. struct RegisteredComponentRecord {
  187.     long                             data[1];
  188. };
  189. typedef struct RegisteredComponentRecord RegisteredComponentRecord;
  190.  
  191. typedef RegisteredComponentRecord *RegisteredComponentPtr;
  192. struct RegisteredComponentInstanceRecord {
  193.     long                             data[1];
  194. };
  195. typedef struct RegisteredComponentInstanceRecord RegisteredComponentInstanceRecord;
  196.  
  197. typedef RegisteredComponentInstanceRecord *RegisteredComponentInstancePtr;
  198. typedef long ComponentResult;
  199.  
  200. enum {
  201.     mpWorkFlagDoWork            = (1 << 0),
  202.     mpWorkFlagDoCompletion        = (1 << 1),
  203.     mpWorkFlagCopyWorkBlock        = (1 << 2),
  204.     mpWorkFlagDontBlock            = (1 << 3),
  205.     mpWorkFlagGetProcessorCount    = (1 << 4),
  206.     mpWorkFlagGetIsRunning        = (1 << 6)
  207. };
  208.  
  209. struct ComponentMPWorkFunctionHeaderRecord {
  210.     UInt32                             headerSize;
  211.     UInt32                             recordSize;
  212.     UInt32                             workFlags;
  213.     UInt16                             processorCount;
  214.     UInt8                             unused;
  215.     UInt8                             isRunning;
  216. };
  217. typedef struct ComponentMPWorkFunctionHeaderRecord ComponentMPWorkFunctionHeaderRecord;
  218.  
  219. typedef ComponentMPWorkFunctionHeaderRecord *ComponentMPWorkFunctionHeaderRecordPtr;
  220. typedef pascal ComponentResult (*ComponentMPWorkFunctionProcPtr)(void *globalRefCon, ComponentMPWorkFunctionHeaderRecordPtr header);
  221. typedef pascal ComponentResult (*ComponentRoutineProcPtr)(ComponentParameters *cp, Handle componentStorage);
  222.  
  223. #if GENERATINGCFM
  224. typedef UniversalProcPtr ComponentMPWorkFunctionUPP;
  225. typedef UniversalProcPtr ComponentRoutineUPP;
  226. #else
  227. typedef ComponentMPWorkFunctionProcPtr ComponentMPWorkFunctionUPP;
  228. typedef ComponentRoutineProcPtr ComponentRoutineUPP;
  229. #endif
  230. /*
  231.     The parameter list for each ComponentFunction is unique. It is 
  232.     therefore up to users to create the appropriate procInfo for their 
  233.     own ComponentFunctions where necessary.
  234. */
  235. typedef UniversalProcPtr ComponentFunctionUPP;
  236. #if GENERATINGCFM
  237. /* 
  238.     CallComponentUPP is a global variable exported from InterfaceLib.
  239.     It is the ProcPtr passed to CallUniversalProc to manually call a component function.
  240. */
  241. extern UniversalProcPtr CallComponentUPP;
  242. #endif
  243. #define ComponentCallNow( callNumber, paramSize ) \
  244.     FIVEWORDINLINE( 0x2F3C,paramSize,callNumber,0x7000,0xA82A )
  245.  
  246. /*
  247. *******************************************************
  248. *                                                        *
  249. *                  APPLICATION LEVEL CALLS                    *
  250. *                                                        *
  251. *******************************************************
  252. */
  253. /*
  254. *******************************************************
  255. * Component Database Add, Delete, and Query Routines 
  256. *******************************************************
  257. */
  258. extern pascal Component RegisterComponent(ComponentDescription *cd, ComponentRoutineUPP componentEntryPoint, short global, Handle componentName, Handle componentInfo, Handle componentIcon)
  259.  TWOWORDINLINE(0x7001, 0xA82A);
  260.  
  261. extern pascal Component RegisterComponentResource(ComponentResourceHandle cr, short global)
  262.  TWOWORDINLINE(0x7012, 0xA82A);
  263.  
  264. extern pascal OSErr UnregisterComponent(Component aComponent)
  265.  TWOWORDINLINE(0x7002, 0xA82A);
  266.  
  267. extern pascal Component FindNextComponent(Component aComponent, ComponentDescription *looking)
  268.  TWOWORDINLINE(0x7004, 0xA82A);
  269.  
  270. extern pascal long CountComponents(ComponentDescription *looking)
  271.  TWOWORDINLINE(0x7003, 0xA82A);
  272.  
  273. extern pascal OSErr GetComponentInfo(Component aComponent, ComponentDescription *cd, Handle componentName, Handle componentInfo, Handle componentIcon)
  274.  TWOWORDINLINE(0x7005, 0xA82A);
  275.  
  276. extern pascal long GetComponentListModSeed(void )
  277.  TWOWORDINLINE(0x7006, 0xA82A);
  278.  
  279. extern pascal long GetComponentTypeModSeed(OSType componentType)
  280.  TWOWORDINLINE(0x702C, 0xA82A);
  281.  
  282. /*
  283. *******************************************************
  284. * Component Instance Allocation and dispatch routines 
  285. *******************************************************
  286. */
  287. extern pascal OSErr OpenAComponent(Component aComponent, ComponentInstance *ci)
  288.  TWOWORDINLINE(0x702D, 0xA82A);
  289.  
  290. extern pascal ComponentInstance OpenComponent(Component aComponent)
  291.  TWOWORDINLINE(0x7007, 0xA82A);
  292.  
  293. extern pascal OSErr CloseComponent(ComponentInstance aComponentInstance)
  294.  TWOWORDINLINE(0x7008, 0xA82A);
  295.  
  296. extern pascal OSErr GetComponentInstanceError(ComponentInstance aComponentInstance)
  297.  TWOWORDINLINE(0x700A, 0xA82A);
  298.  
  299. /*
  300. *******************************************************
  301. *                                                        *
  302. *                      CALLS MADE BY COMPONENTS              *
  303. *                                                        *
  304. *******************************************************
  305. */
  306. /*
  307. *******************************************************
  308. * Component Management routines
  309. *******************************************************
  310. */
  311. extern pascal void SetComponentInstanceError(ComponentInstance aComponentInstance, OSErr theError)
  312.  TWOWORDINLINE(0x700B, 0xA82A);
  313.  
  314. extern pascal long GetComponentRefcon(Component aComponent)
  315.  TWOWORDINLINE(0x7010, 0xA82A);
  316.  
  317. extern pascal void SetComponentRefcon(Component aComponent, long theRefcon)
  318.  TWOWORDINLINE(0x7011, 0xA82A);
  319.  
  320. extern pascal short OpenComponentResFile(Component aComponent)
  321.  TWOWORDINLINE(0x7015, 0xA82A);
  322.  
  323. extern pascal OSErr OpenAComponentResFile(Component aComponent, short *resRef)
  324.  TWOWORDINLINE(0x702F, 0xA82A);
  325.  
  326. extern pascal OSErr CloseComponentResFile(short refnum)
  327.  TWOWORDINLINE(0x7018, 0xA82A);
  328.  
  329. /*
  330. *******************************************************
  331. * Component Instance Management routines
  332. *******************************************************
  333. */
  334. extern pascal Handle GetComponentInstanceStorage(ComponentInstance aComponentInstance)
  335.  TWOWORDINLINE(0x700C, 0xA82A);
  336.  
  337. extern pascal void SetComponentInstanceStorage(ComponentInstance aComponentInstance, Handle theStorage)
  338.  TWOWORDINLINE(0x700D, 0xA82A);
  339.  
  340. extern pascal long GetComponentInstanceA5(ComponentInstance aComponentInstance)
  341.  TWOWORDINLINE(0x700E, 0xA82A);
  342.  
  343. extern pascal void SetComponentInstanceA5(ComponentInstance aComponentInstance, long theA5)
  344.  TWOWORDINLINE(0x700F, 0xA82A);
  345.  
  346. extern pascal long CountComponentInstances(Component aComponent)
  347.  TWOWORDINLINE(0x7013, 0xA82A);
  348.  
  349. /* useful helper routines for convenient method dispatching */
  350. extern pascal long CallComponentFunction(ComponentParameters *params, ComponentFunctionUPP func)
  351.  TWOWORDINLINE(0x70FF, 0xA82A);
  352.  
  353. extern pascal long CallComponentFunctionWithStorage(Handle storage, ComponentParameters *params, ComponentFunctionUPP func)
  354.  TWOWORDINLINE(0x70FF, 0xA82A);
  355.  
  356. #if GENERATINGPOWERPC
  357. extern pascal long CallComponentFunctionWithStorageProcInfo(Handle storage, ComponentParameters *params, ProcPtr func, long funcProcInfo);
  358.  
  359. #else
  360. #define CallComponentFunctionWithStorageProcInfo(storage, params, func, funcProcInfo ) CallComponentFunctionWithStorage(storage, params, func)
  361.  
  362. #endif
  363. extern pascal long DelegateComponentCall(ComponentParameters *originalParams, ComponentInstance ci)
  364.  TWOWORDINLINE(0x7024, 0xA82A);
  365.  
  366. extern pascal OSErr SetDefaultComponent(Component aComponent, short flags)
  367.  TWOWORDINLINE(0x701E, 0xA82A);
  368.  
  369. extern pascal ComponentInstance OpenDefaultComponent(OSType componentType, OSType componentSubType)
  370.  TWOWORDINLINE(0x7021, 0xA82A);
  371.  
  372. extern pascal OSErr OpenADefaultComponent(OSType componentType, OSType componentSubType, ComponentInstance *ci)
  373.  TWOWORDINLINE(0x702E, 0xA82A);
  374.  
  375. extern pascal Component CaptureComponent(Component capturedComponent, Component capturingComponent)
  376.  TWOWORDINLINE(0x701C, 0xA82A);
  377.  
  378. extern pascal OSErr UncaptureComponent(Component aComponent)
  379.  TWOWORDINLINE(0x701D, 0xA82A);
  380.  
  381. extern pascal long RegisterComponentResourceFile(short resRefNum, short global)
  382.  TWOWORDINLINE(0x7014, 0xA82A);
  383.  
  384. extern pascal OSErr GetComponentIconSuite(Component aComponent, Handle *iconSuite)
  385.  TWOWORDINLINE(0x7029, 0xA82A);
  386.  
  387. /*
  388. *******************************************************
  389. *                                                        *
  390. *              Direct calls to the Components                *
  391. *                                                        *
  392. *******************************************************
  393. */
  394. /* Old style names*/
  395. extern pascal long ComponentFunctionImplemented(ComponentInstance ci, short ftnNumber)
  396.  FIVEWORDINLINE(0x2F3C, 0x0002, 0xFFFD, 0x7000, 0xA82A);
  397.  
  398. extern pascal long GetComponentVersion(ComponentInstance ci)
  399.  FIVEWORDINLINE(0x2F3C, 0x0000, 0xFFFC, 0x7000, 0xA82A);
  400.  
  401. extern pascal long ComponentSetTarget(ComponentInstance ci, ComponentInstance target)
  402.  FIVEWORDINLINE(0x2F3C, 0x0004, 0xFFFA, 0x7000, 0xA82A);
  403.  
  404. /* New style names*/
  405. extern pascal ComponentResult CallComponentOpen(ComponentInstance ci, ComponentInstance self)
  406.  FIVEWORDINLINE(0x2F3C, 0x0004, 0xFFFF, 0x7000, 0xA82A);
  407.  
  408. extern pascal ComponentResult CallComponentClose(ComponentInstance ci, ComponentInstance self)
  409.  FIVEWORDINLINE(0x2F3C, 0x0004, 0xFFFE, 0x7000, 0xA82A);
  410.  
  411. extern pascal ComponentResult CallComponentCanDo(ComponentInstance ci, short ftnNumber)
  412.  FIVEWORDINLINE(0x2F3C, 0x0002, 0xFFFD, 0x7000, 0xA82A);
  413.  
  414. extern pascal ComponentResult CallComponentVersion(ComponentInstance ci)
  415.  FIVEWORDINLINE(0x2F3C, 0x0000, 0xFFFC, 0x7000, 0xA82A);
  416.  
  417. extern pascal ComponentResult CallComponentRegister(ComponentInstance ci)
  418.  FIVEWORDINLINE(0x2F3C, 0x0000, 0xFFFB, 0x7000, 0xA82A);
  419.  
  420. extern pascal ComponentResult CallComponentTarget(ComponentInstance ci, ComponentInstance target)
  421.  FIVEWORDINLINE(0x2F3C, 0x0004, 0xFFFA, 0x7000, 0xA82A);
  422.  
  423. extern pascal ComponentResult CallComponentUnregister(ComponentInstance ci)
  424.  FIVEWORDINLINE(0x2F3C, 0x0000, 0xFFF9, 0x7000, 0xA82A);
  425.  
  426. extern pascal ComponentResult CallComponentGetMPWorkFunction(ComponentInstance ci, ComponentMPWorkFunctionUPP *workFunction, void **refCon)
  427.  FIVEWORDINLINE(0x2F3C, 0x0008, 0xFFF8, 0x7000, 0xA82A);
  428.  
  429. /* UPP call backs */
  430.  
  431. #if GENERATINGCFM
  432. #else
  433. #endif
  434.  
  435. enum {
  436.     uppComponentMPWorkFunctionProcInfo = kPascalStackBased
  437.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  438.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(void *)))
  439.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(ComponentMPWorkFunctionHeaderRecordPtr))),
  440.     uppComponentRoutineProcInfo = kPascalStackBased
  441.          | RESULT_SIZE(SIZE_CODE(sizeof(ComponentResult)))
  442.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ComponentParameters *)))
  443.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Handle)))
  444. };
  445.  
  446. #if GENERATINGCFM
  447. #define NewComponentMPWorkFunctionProc(userRoutine)        \
  448.         (ComponentMPWorkFunctionUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppComponentMPWorkFunctionProcInfo, GetCurrentArchitecture())
  449. #define NewComponentRoutineProc(userRoutine)        \
  450.         (ComponentRoutineUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppComponentRoutineProcInfo, GetCurrentArchitecture())
  451. #else
  452. #define NewComponentMPWorkFunctionProc(userRoutine)        \
  453.         ((ComponentMPWorkFunctionUPP) (userRoutine))
  454. #define NewComponentRoutineProc(userRoutine)        \
  455.         ((ComponentRoutineUPP) (userRoutine))
  456. #endif
  457.  
  458. #if GENERATINGCFM
  459. #define CallComponentMPWorkFunctionProc(userRoutine, globalRefCon, header)        \
  460.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppComponentMPWorkFunctionProcInfo, (globalRefCon), (header))
  461. #define CallComponentRoutineProc(userRoutine, cp, componentStorage)        \
  462.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppComponentRoutineProcInfo, (cp), (componentStorage))
  463. #else
  464. #define CallComponentMPWorkFunctionProc(userRoutine, globalRefCon, header)        \
  465.         (*(userRoutine))((globalRefCon), (header))
  466. #define CallComponentRoutineProc(userRoutine, cp, componentStorage)        \
  467.         (*(userRoutine))((cp), (componentStorage))
  468. #endif
  469. /* ProcInfos */
  470.  
  471. /* MixedMode ProcInfo constants for component calls */
  472. enum {
  473.     uppComponentFunctionImplementedProcInfo            = 0x000002F0,
  474.     uppGetComponentVersionProcInfo                    = 0x000000F0,
  475.     uppComponentSetTargetProcInfo                    = 0x000003F0,
  476.     uppCallComponentOpenProcInfo                    = 0x000003F0,
  477.     uppCallComponentCloseProcInfo                    = 0x000003F0,
  478.     uppCallComponentCanDoProcInfo                    = 0x000002F0,
  479.     uppCallComponentVersionProcInfo                    = 0x000000F0,
  480.     uppCallComponentRegisterProcInfo                = 0x000000F0,
  481.     uppCallComponentTargetProcInfo                    = 0x000003F0,
  482.     uppCallComponentUnregisterProcInfo                = 0x000000F0,
  483.     uppCallComponentGetMPWorkFunctionProcInfo        = 0x00000FF0
  484. };
  485.  
  486. #if PRAGMA_ALIGN_SUPPORTED
  487. #pragma options align=reset
  488. #endif
  489.  
  490. #if PRAGMA_IMPORT_SUPPORTED
  491. #pragma import off
  492. #endif
  493.  
  494. #ifdef __cplusplus
  495. }
  496. #endif
  497.  
  498. #endif /* __COMPONENTS__ */
  499.  
  500.